package controller;

import java.awt.Point;
import java.util.List;

/**
 * Interface for managing a computer-controlled game
 */
public interface ComputerControlledGame {

	/**
	 * Sets game board according to two-players game layout
	 */
	public void setTowPlayersBoard();
	
	/**
	 * Chooses a piece and one possible move.
	 * After piece and valid move where chosen, move is done.
	 * Piece is chosen according to the player that should play at current turn
	 */
	public Move makeMoveComputer();
	
	/**
	 * Returns maximal number of turns in computer-controlled game
	 * @return maximal number of turns allowed
	 */
	public int getMaxTurns();
	
	/**
	 * Confirms if game is in Stalemate state
	 */
	public boolean isStalemate();
	
	/**
	 * Confirms if game is in Check state
	 * @return True if in Check, False if not
	 */
	public boolean isCheckmate();
	
	/**
	 * Places a Creature in each free position in probability of 2%.
	 * If a position already holds another Creature and was chosen, its Creature is destroyed 
	 */
	public List<Point> placeCreatures();
 
	/**
	 * Chooses a piece and one possible move, and makes the move.
	 * @return move's source position (array's first entry), move's destination position (array's second entry)
	 * 		   and position of Creature that has destroyed the piece to be moved (array's third entry).
	 * 	       If no Creature has destroyed the piece, array's third entry is null
	 */
	public Point[] makeMoveComputerSpecialGame();
}